<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>2.对象的分类</title>
</head>

<body>

</body>
<script>
    /*  
        对象的便利
        使用for...in遍历
        循环中的代码每执行一次，就会对数组的元素或者对象的属性进行一次操作
        foe...in语句用于对数组或者对象属性进行循环操作
        语法如下：
        for(变量 in 对象名字){
            循环体()
        }
        语法中变量时自定义的，要符合命名规范，通常我们见这个变量写为key或k
    */
    var obj = {
        name: '张三',
        age: 11,
        sex: '男',
        f1() {
            console.log("我是方法")
        }
    }
    for (var key in obj) {

        console.log(key)//输入对象中所有的键
        console.log(obj[key])//输出键对应的值
        console.log(typeof (key))
        console.log('------------');
    }
    /* 
     js中，可以将对象分为“内部对象”“宿主对象”和“自定义对象”
     1、内部对象，分为本地对象和内置对象
     本地对象：Number,String,Boolean,Array,Function,Date,Object,RegExp,Error等
     内置对象：Glabal和Math两个对象又被称之为内置对象，这两个对象在脚本程序初始化时
             被创建，不必实例化这两个对象
             内置对象定义为由ECMAScript事项提供的，ECMAScript程序开始执行时出现，
             这意味着开发者不必明确实例化内置对象，因为踏已经被实例化了
     2、宿主对象
     宿主对象就是执行官js脚本的环境提供的对象，对于嵌入到网页中的js来说、
     其宿主对象就是浏览器提供的对象，如IE，Firefox等浏览器提供的对象
     不同的浏览器提供的宿主对象可能不同，即使提供相同的对象，其方式也大相径庭
     这会带来浏览器的兼容问题，增加开发难度，浏览器对象有很多，
     例如：Window和Document等等
 
     3、自定义对象，就是开发人员自己定义的对象，js允许使用自定义对象，使js得到扩充
    */
    //数组对象
    //字面量
    var arr = [1, 2, 3,]
    //
    var arr1 = new Array();
    /* 
    注意在上面代买中arr1创建出的是一个空数组，如果需要使用构造函数创建非空数组，
    那么可以在创建时可以给构造函数填入参数
    传参数传递规则：
    如果只传入一个参数（正整数），则参数规定了数组的长度
    如果传入多个参数，则参数为数组的元素
    */
    /* 
         数组对象的方法：sort(),对数组元素进行排序，默认升序
         参数：规定排序规则默认是按字母升序排
         返回值：排序后的新数组
         会改变原数组，所以是内部方法
 
    */
    var a1 = [22, 3, 45, 65, 78, 98, 12, 24]
    a1.sort(function (a, b) {
        //a代表后面的数   b代表前面的数
        return a - b
    })
</script>

</html>